package com.echo.im.domain.group.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.echo.im.domain.group.vo.GroupInviteDTO;
import com.echo.im.domain.group.vo.GroupMemberVO;
import com.echo.im.domain.group.vo.GroupVO;
import com.echo.im.domain.group.dto.GroupDTO;
import com.echo.im.domain.group.dto.HandlerGroupInviteDTO;
import com.echo.im.repository.dao.entity.Group;

import java.util.List;
import java.util.Map;

/**
 * 群组服务接口，用于处理群组相关的业务逻辑
 * @author echo
 */
public interface GroupService  extends IService<Group> {

    /**
     * 创建群组
     *
     * @param dto 群组信息的视图对象，包含创建群组所需的各种信息
     * @return 创建完成的群组的视图对象
     */
    GroupDTO createGroup(GroupDTO dto);

    /**
     * 修改群组信息
     *
     * @param dto 需要修改的群组信息的视图对象
     * @return 修改后的群组的视图对象
     */
    GroupDTO modifyGroup(GroupDTO dto);

    /**
     * 删除群组
     *
     * @param groupId 群组的ID
     */
    void deleteGroup(Long groupId);

    /**
     * 根据ID查找群组
     *
     * @param groupId 群组的ID
     * @return 查找到的群组的视图对象
     */
    GroupVO findById(Long groupId);

    /**
     * 查找所有群组
     *
     * @return 所有群组的视图对象列表
     */
    List<GroupVO> findGroups();

    /**
     * 邀请用户加入群组
     *
     * @param vo 包含邀请信息的DTO对象
     */
    Map<Long,String> invite(GroupInviteDTO vo);

    /**
     * 查找群组成员
     *
     * @param groupId 群组的ID
     * @return 群组成员的视图对象列表
     */
    List<GroupMemberVO> findGroupMembers(Long groupId);

    /**
     * 退出群组
     *
     * @param groupId 群组的ID
     */
    void quitGroup(Long groupId);

    /**
     * 将用户踢出群组
     *
     * @param groupId 群组的ID
     * @param userId 被踢用户的ID
     */
    void kickGroup(Long groupId, Long userId);

    /**
     * 处理群组邀请请求
     *
     * @param dto 包含处理邀请所需信息的DTO对象
     */
    void handlerInvite(HandlerGroupInviteDTO dto);

}
